// Loesung_von_Aufgabe_12.4_2_RGB_Processing

// Bibliothek von Processing für serielle Schnittstellen importieren (.* bedeutet alles importieren)
import processing.serial.*;

// Die Variable arduino wird der Klasse Serial zugeordnet
Serial arduino;

// Diese Booleans speichern, welche Farben der RGB-LED ein- oder ausgeschaltet sind
boolean ledR = false;
boolean ledG = false;
boolean ledB = false;

void setup()
{
  size(900, 300);

  /* Die Werte vom seriellen Port des Arduinos werden der Variablen "arduino" zugeordnet.
   Serial.list() gibt ein Array aller angeschlossenen seriellen Geräte zurück.
   Hier wird davon ausgegangen, dass nur der Arduino angeschlossen ist und er somit an erster Stelle des Arrays liegt.
   Die Baudrate beträgt wie im Arduino-Sketch 9600 */
  arduino = new Serial(this, Serial.list()[0], 9600);
}

void mousePressed()
{
  // Falls der rote Schalter gedrückt wurde
  if (mouseX <= 300)
  {
    // Falls die rote LED an ist
    if (ledR)
    {
      arduino.write('r'); // Signal zum Ausschalten der roten LED senden
      ledR = false; // Den Status der roten LED auf 'aus' (false) setzen
    } else // Falls die rote LED aus ist
    {
      arduino.write('R'); // Signal zum Anschalten der roten LED senden
      ledR = true; // Den Status der roten LED auf 'an' (true) setzen
    }
  } else if (mouseX <= 600)// Falls der grüne Schalter gedrückt wurde
  {
    // Falls die grüne LED an ist
    if (ledG)
    {
      arduino.write('g'); // Signal zum Ausschalten der grünen LED senden
      ledG = false; // Den Status der grünen LED auf 'aus' (false) setzen
    } else // Falls die grüne LED aus ist
    {
      arduino.write('G'); // Signal zum Anschalten der grünen LED senden
      ledG = true; // Den Status der grünen LED auf 'an' (true) setzen
    }
  } else if (mouseX <= 900)// Falls der blaue Schalter gedrückt wurde
  {
    // Falls die blaue LED an ist
    if (ledB)
    {
      arduino.write('b'); // Signal zum Ausschalten der blauen LED senden
      ledB = false; // Den Status der blauen LED auf 'aus' (false) setzen
    } else // Falls die blaue LED aus ist
    {
      arduino.write('B'); // Signal zum Anschalten der blauen LED senden
      ledB = true; // Den Status der blauen LED auf 'an' (true) setzen
    }
  }
}

void draw()
{
  background(0);
  noStroke();

  // Roten Schalter zeichnen. Falls die rote LED ausgeschaltet ist, wird der Schalter dunkler gezeichnet
  if (ledR)
    fill(255, 0, 0);
  else
    fill(50, 0, 0);
  rect(0, 0, 300, 300);

  // Grünen Schalter zeichnen. Falls die grüne LED ausgeschaltet ist, wird der Schalter dunkler gezeichnet
  if (ledG)
    fill(0, 255, 0);
  else
    fill(0, 50, 0);
  rect(300, 0, 300, 300);

  // Blauen Schalter zeichnen. Falls die blaue LED ausgeschaltet ist, wird der Schalter dunkler gezeichnet
  if (ledB)
    fill(0, 0, 255);
  else
    fill(0, 0, 50);
  rect(600, 0, 300, 300);
}